package com.smzd.ccms.complets;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

import com.smzd.ccms.business.ArticleService;
import com.smzd.ccms.core.BaseCompletPlugin;
import com.smzd.ccms.core.ParamsWrapper;
import com.smzd.ccms.domain.Article;
import com.smzd.ccms.domain.Channel;

/**
 * 获取单页类型的栏目中的第一篇文章，并将其带到视图中的组件。<br>
 * 单页类型的栏目广泛存在着，比如公司的简介通常只有一篇文章，但是作为一篇文章存在的话不容易进行配置，编辑的话也容易丢失历史版本。<br>
 * 通过单页类型的栏目可以方便的配置这些只有一篇上线文章的栏目，这样的栏目也成为这样的文章的封装，并且配置也就容易的多。<br>
 * <br>
 * 单页类型的栏目文章组件需要在参数具体指定要展示的栏目的Id。组件将自动获取其中应该展示的文章内容。
 * 
 * @author YuZhongda
 * 
 */
public class SingleArticleComplet extends BaseCompletPlugin {
	ArticleService articleService;

	public SingleArticleComplet(int id) {
		super(id);
		articleService = ArticleService.getInstance();
	}

	@Override
	public String execute(ParamsWrapper params) throws Exception {
		if (articleService == null) {
			synchronized (this) {
				if (articleService == null) {
					articleService = ArticleService.getInstance();
				}
			}
		}
		Integer chId = params.getParamValue("chId", 0);
		if (chId == null || chId == 0) {
			Channel ch = params.getEntityWrapper().getChannel();
			chId = ch.getId();
		}
		Article article = articleService.getFirstArticleByChannelId(chId);
		if (article != null) {
			String content = article.getContent();
			if (content != null) {
				try {
					article.setContent(URLDecoder.decode(content, "utf-8"));
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			}
		}
		params.put("article", article);
		return params.getParamValue("view", "ch-art-1st.ftl");
	}
}
